package com.example.demo.service.imp;

import com.alibaba.druid.support.http.util.IPAddress;
import com.example.demo.controller.data.ReturnData;
import com.example.demo.dao.UserDao;
import com.example.demo.entity.User;
import com.example.demo.service.UploadService;
import com.example.demo.utils.TokenUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Service
public class UploadServiceImp implements UploadService {
    @Autowired
    UserDao userDao;
    @Value("${server.port}")//引用配置文件中的运行端口
    String port;
    @Value("${uploadPath}")//引用配置文件中的上传目录
    String uploadPath;
    @Value("${ip}")//引用配置文件中的IP
    String ip;
    /**
     * 上传头像的业务方法
     *
     * @param file  一个头像文件
     * @param token 前端传过来的token
     * @return
     */
    @Override
    public ReturnData uploadAvatar(MultipartFile file, String token) throws IOException {
        try {
            String username = TokenUtils.getUsernameByToken(token);
            User user = userDao.findByUsername(username).get(0);

            String filename = file.getOriginalFilename();//获取上传的文件名称
            String dirPath = uploadPath;//设置保存的文件目录
            File filePath = new File(dirPath);
            if (!filePath.exists()) {//表示D:\file是不是存在这个文件夹
                filePath.mkdirs();//不存在就创建对应的文件夹
            }
            File newFile = new File(dirPath + filename);
            file.transferTo(newFile);//将上传的文件保存在D：\file
            user.setAvatar("http://"+ip+":"+port+"/images/" + filename);
            userDao.save(user);
            return ReturnData.ok("上传成功");
        } catch (Exception e) {
            return ReturnData.error("找不到对应的用户信息");
        }
    }

    /**
     * 通用上传文件的方法
     * @param file  要上传的文件
     * @param type  业务类型
     * @param token token
     * @return
     */
    @Override
    public ReturnData uploadFile(MultipartFile file, int type, String token) throws IOException {
        String[] temp = file.getOriginalFilename().split("\\.");
        String name = temp[temp.length-1];//name就是文件的后缀名
        String filename = UUID.randomUUID().toString()+"."+name;//UUID会生成一个随机的字符串，永远不会重名，获取上传的文件名称
        String dirPath = "",env="";
        if(type == 1){//上传头像
            dirPath = uploadPath+"avatar/";//设置保存的文件目录
            env = "avatar/";
        }else if(type == 2){//朋友圈里面图片
            dirPath = uploadPath+"circle/";//设置保存的文件目录
            env = "circle/";
        }else if(type == 3){
            dirPath = uploadPath+"banner/";//设置保存的文件目录
            env = "banner/";
        }

        File filePath = new File(dirPath);
        if (!filePath.exists()) {//表示D:\file是不是存在这个文件夹
            filePath.mkdirs();//不存在就创建对应的文件夹
        }
        File newFile = new File(dirPath + filename);
        file.transferTo(newFile);

        return ReturnData.ok("上传成功", "http://"+ip+":"+port+"/"+env + filename);

    }
}
